#include <QApplication>
#include <QMainWindow>
#include <QComboBox>
#include <QStackedWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>
#include "mainwindow.h"
#include "page/login/login.h"
#include "layout/container/container.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow window;
    QWidget *widget = new QWidget();

    //在窗口中创建一个具有垂直布局的空白部件
    QVBoxLayout *layout = new QVBoxLayout();
    widget->setLayout(layout);
    window.setCentralWidget(widget);
   
    //创建下拉组件
    /*
    QComboBox *box = new QComboBox();
    QStringList list{"1","2"};
    box->addItems(list);
    */

    //创建堆叠组件
    QStackedWidget *sw = new QStackedWidget();

    //创建页面
    login *loginPage = new login;
    container *containerPage = new container;


    //添加进堆叠组件
    sw->addWidget(loginPage);
    sw->addWidget(containerPage);

    //添加下拉组件到主窗口布局对象中
    //layout->addWidget(box);
    //添加堆叠组件到主窗口布局对象中
    layout->addWidget(sw);

    //信号和槽关联
    /*
     * static_cast为基础数据类型的转换
     * double 转换为 int
     * double d = 5.5;int i = static_cast<int>(d);
     *
     * &QComboBox::currentIndexChanged是一个槽函数
     * static_cast<int>(d)是转换范式
     * void(QComboBox::*)(int) 是一个输出值为int的函数
     * static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged)即为转换槽函数为一个输出int的函数
     *
     * 信号与槽匹配需要准确匹配信号和槽的签名，所以转换相同类型是必要的
     *
     * [sw]传递给lambda函数的参数
     *
     * 可以建立一个堆叠序号和组件页面直接的关系，跳转那个页面就可以直接操作序号sw->setCurrentIndex(index);
     */

    /*
    QObject::connect(box, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), sw, [sw](int index){
        sw->setCurrentIndex(index);
    });
    */

    /*
    QObject::connect(box, &QComboBox::currentIndexChanged, sw, [sw](int index){
        sw->setCurrentIndex(index);
    });
    */
        
    //信号和槽关联  login页面跳转到container页面
    QObject::connect(loginPage, &login::gotoNextPage, sw, [sw,containerPage](QString name){
        if (name == "container") {
           sw->setCurrentWidget(containerPage);
        }
    });

    //显示窗口
    window.show();

    qDebug() << "app start";

    return a.exec ();
}

